package uniriotec.dsw.tickets.dao.implJPA;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import uniriotec.dsw.tickets.dao.interfaces.IUsuarioDAO;
import uniriotec.dsw.tickets.modelo.Usuario;



@Repository("usuarioDAO")
public class UsuarioDAOJPA implements IUsuarioDAO{

	public UsuarioDAOJPA() {
		super();
		// TODO Auto-generated constructor stub
	}

	@PersistenceContext
	protected EntityManager entityManager;

	public void setEntityManager(
			EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	@SuppressWarnings("unchecked")
	@Transactional(readOnly=true)
	public List<Usuario> list(){
		String jpql = " SELECT u from Usuario u order by u.nome";
		Query query = entityManager.createQuery(jpql);
		List<Usuario> usuarios = (List<Usuario>) query.getResultList();
		return usuarios;
	}
	
	@SuppressWarnings("unchecked")
	@Transactional(readOnly=true)
	public List<Usuario> findByPerfil(String perfil){
		String jpql = " SELECT u from Usuario u" +
				" WHERE u.perfil = :perfil " +
				" ORDER BY u.nome";
		Query query = entityManager.createQuery(jpql);
		query.setParameter("perfil", perfil);
		List<Usuario> usuario = (List<Usuario>) query.getResultList();
		return usuario;
	}

	@Transactional
	public void create(Usuario usuario){
		entityManager.persist(usuario);
		//return usuario;
	}

	@Transactional
	public void update(Usuario usuario){
		entityManager.merge(usuario);
	}

	@Transactional
	public void remove(Usuario usuario){
		usuario = entityManager.find(Usuario.class, usuario.getId());
		entityManager.remove(usuario);
	}

	public Usuario find(Long id) {
		// TODO Auto-generated method stub
		return null;
	}





	public Usuario findByEmail(String email) {
		// TODO Auto-generated method stub
		return null;
	}
}
